/**
 * Created by leezhihua on 2018/7/20
 * @flow
 * */


'use strict';

import React, {Component} from 'react';
import {type} from "./utils";


let DateTime = {

	/**
	 * 将字符串、时间戳等转化成Date类型
	 *
	 * @param {String|Date|Number} param
	 * @return {Date}
	 */
	transformToDate(param) {
		if (!param) {
			return
		}
		let typeString = type(param);
		let dDate;
		if (typeString === "date") {	// 日期对象。
			dDate = param;
		} else if (typeString === "number") {	// 毫秒值类型。
			dDate = new Date(param);
		} else if (typeString === "string") {	// 字数串类型。
			dDate = new Date(param.replace(/[-.]/g, "/"));
		}
		return dDate;
	},

	/**
	 * 将时间转化成Long型时间戳
	 *
	 * @param {String|Date|Number} sDateTime
	 * @return {Number}
	 */

	transformToTimestamp(sDateTime) {
		if (!sDateTime) {
			return null;
		}
		let dDate = null,
			sDateType = type(sDateTime);
		if (sDateType === "date") { // 日期对象。
			dDate = Date.parse(sDateTime);
		} else if (sDateType === "number") {    // 毫秒值类型。
			dDate = sDateTime;
		} else if (sDateType === "string") {    // 字数串类型。
			dDate = Date.parse(this.transformToDate(sDateTime));
		}
		return dDate;
	},

	/**
	 * 将时间转换成指定格式的字符串。
	 *
	 * @param {String|Date|Number} sDateTime
	 * @param {String} sFormat 格式化字符串
	 * @return {String}
	 */

	transformToTimeString(sDateTime, sFormat) {
		if (!sDateTime) {
			return "";
		}
		let dDate = this.transformToDate(sDateTime);

		let oFormat = {
			"mm+": dDate.getMonth() + 1, //月份
			"d+": dDate.getDate(), //日
			"h+": dDate.getHours() % 12 === 0 ? 12 : dDate.getHours() % 12, //小时
			"H+": dDate.getHours(), //小时
			"m+": dDate.getMinutes(), //分
			"s+": dDate.getSeconds(), //秒
			"q+": Math.floor((dDate.getMonth() + 3) / 3), //季度
			"S": dDate.getMilliseconds() //毫秒
		};
		let oWeek = {
			"0": "/u65e5",
			"1": "/u4e00",
			"2": "/u4e8c",
			"3": "/u4e09",
			"4": "/u56db",
			"5": "/u4e94",
			"6": "/u516d"
		};
		if (/(y+)/i.test(sFormat)) {
			sFormat = sFormat.replace(RegExp.$1, (dDate.getFullYear() + "").substr(4 - RegExp.$1.length));
		}
		if (/(E+)/.test(sFormat)) {
			sFormat = sFormat.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "/u661f/u671f" : "/u5468") : "") + oWeek[getDay() + ""]);
		}
		for (let k in oFormat) {
			if (new RegExp("(" + k + ")").test(sFormat)) {
				sFormat = sFormat.replace(RegExp.$1, (RegExp.$1.length === 1) ? (oFormat[k]) : (("00" + oFormat[k]).substr(("" + oFormat[k]).length)));
			}
		}
		return sFormat;
	},

	/**
	 * 判断是否同一时间-默认同一天
	 *
	 * @param {String|Date|Number} date1
	 * @param {String|Date|Number} date2
	 * @param {String} limit {1:同一年,2:同一月,3:同一天,4:同一时,5:同一分}
	 * @return {Boolean}
	 */

	isSameDate(date1, date2, limit) {
		if (!date1 || !date2) {
			return
		}
		limit = limit || 3;
		let dDate1 = this.transformToDate(date1);
		let dDate2 = this.transformToDate(date2);
		if (
			limit === 1
			&& dDate1.getFullYear() === dDate2.getFullYear()
		) {
			return true
		} else if (
			limit === 2
			&& dDate1.getFullYear() === dDate2.getFullYear()
			&& dDate1.getMonth() === dDate2.getMonth()
		) {
			return true
		} else if (
			limit === 3
			&& dDate1.getFullYear() === dDate2.getFullYear()
			&& dDate1.getMonth() === dDate2.getMonth()
			&& dDate1.getDate() === dDate2.getDate()
		) {
			return true
		} else if (
			limit === 4
			&& dDate1.getFullYear() === dDate2.getFullYear()
			&& dDate1.getMonth() === dDate2.getMonth()
			&& dDate1.getDate() === dDate2.getDate()
			&& dDate1.getHours() === dDate2.getHours()
		) {
			return true
		} else if (
			limit === 5
			&& dDate1.getFullYear() === dDate2.getFullYear()
			&& dDate1.getMonth() === dDate2.getMonth()
			&& dDate1.getDate() === dDate2.getDate()
			&& dDate1.getHours() === dDate2.getHours()
			&& dDate1.getMinutes() === dDate2.getMinutes()
		) {
			return true
		} else {
			return false
		}
	},

};

export default DateTime;